package com.learn.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * Jwt 配置
 *
 * @author yaoqihui
 * @version 2022/6/8
 * @see [相关类/方法]
 */
@Data
@Component
@ConfigurationProperties (prefix = "jwt-config")
public class JwtConfig
{
	/**
	 * jwt密钥
	 */
	private String key;

	/**
	 * 账号加密密钥
	 */
	private String accountSecretKey;

	/**
	 * clientType配置管控
	 * k= x-DeviceInfo(index=2) v= 实际的clientType
	 */
	private Map<String, String> clientTypeConfig;

	/**
	 * 默认的clientType，找不到配置时候就用这个
	 */
	private String defaultClientType;

	/**
	 * 是否开启Redis校验。默认开启
	 */
	private Boolean enableRedisAuth = true;

	/**
	 * 是否开启客户端类型校验。默认开启
	 */
	private Boolean enableClientTypeAuth = true;

	/**
	 * 面向终端配置Token配置
	 */
	private TokenConfig subsConfig;

	/**
	 * 面向运营管理Token配置
	 */
	private TokenConfig adminConfig;

	@Data
	public static class TokenConfig
	{
		/**
		 * token类型
		 */
		private String applyType;

		/**
		 * token有效时长（单位：秒）
		 */
		private Long accessTokenExpires;

		/**
		 * refreshToken有效时长（单位：秒）
		 */
		private Long refreshTokenExpires;

		/**
		 * accessToken在缓存中的Key值模板
		 */
		private String accessTokenKeyFormat;

		/**
		 * refreshToken在缓存中的Key值模板
		 */
		private String refreshTokenKeyFormat;

		/**
		 * 用户状态在缓存中的key值模板
		 */
		private String userStatusTokenKeyFormat;

		/**
		 * 登录客户端类型在缓存中的key值模板
		 */
		private String loginClientTypeKeyFormat;

		/**
		 * 默认渠道名称，若请求参数未携带渠道，则采用该值
		 */
		private String defaultChannel;
	}
}
